package com.hinnotek.amoeba.ui.activity.old

import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import com.chad.library.adapter.base.BaseQuickAdapter
import com.lee.common.base.BaseActivity
import com.hinnotek.amoeba.R
import com.hinnotek.amoeba.adapters.old.TIOtherAmoebainstallListAdapter
import com.hinnotek.amoeba.bean.old.AmibaInstallPageByUserIdBean
import com.hinnotek.amoeba.databinding.IncludeRecyclerviewButtonBinding
import com.hinnotek.amoeba.dialog.CustomDialog
import com.hinnotek.amoeba.ext.init
import com.hinnotek.amoeba.utilities.IntentUtils
import com.lee.common.utils.SharedPreUtils
import com.hinnotek.amoeba.utilities.ToastUtils
import com.hinnotek.amoeba.viewmodels.AmibaInstallViewModel
import com.lee.common.network.net.ObserverState
import com.scwang.smart.refresh.layout.api.RefreshLayout
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint
class TIOtherAmoebaInstallListActivity : BaseActivity<IncludeRecyclerviewButtonBinding>() {

    private var mAdapter: TIOtherAmoebainstallListAdapter? = null
    private var pageNo = 1
    private val pageSize = 20

    val viewModel by viewModels<AmibaInstallViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setLeftVisible(true)
        setTitle("申请其他阿米巴安装")

        setContentView(R.layout.include_recyclerview_button)
    }

    override fun initVew() {

        bindingView.superButtonB.text = "其他阿米巴安装申请"
        bindingView.superButtonB.setOnClickListener {
            IntentUtils.startActivity(
                mContext,
                TIOtherAmoebaInstallAddActivity::class.java
            )
        }
        bindingView.recyclerView.init()
        bindingView.recyclerView.adapter = TIOtherAmoebainstallListAdapter().also {
            mAdapter = it
        }
        mAdapter?.setOnItemClickListener { adapter: BaseQuickAdapter<*, *>, _: View?, position: Int ->
            val data = adapter.data.get(position) as AmibaInstallPageByUserIdBean
            val bundle = Bundle()
            bundle.putInt("amibaInstallId", data.amibaInstallId)
            if (data.approvalState == 2) {
                IntentUtils.startActivity(
                    mContext,
                    TIOtherinsViewingDetailActivity::class.java,
                    bundle
                )
            } else {
                IntentUtils.startActivity(
                    mContext,
                    TIOtherAmoebaInstalledDetailActivity::class.java,
                    bundle
                )
            }
        }
        setData()
    }

    override fun setData() {
        //下拉刷新
        bindingView.refreshLayout.setOnRefreshListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo = 1
                    getAmibaInstallPageByUserId()
                    refreshLayout.finishRefresh()
                }, 0
            )
        }
        //上拉加载
        bindingView.refreshLayout.setOnLoadMoreListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo++
                    getAmibaInstallPageByUserId()
                    refreshLayout.finishLoadMore()
                }, 0
            )
        }
    }

    override fun onResume() {
        super.onResume()
        bindingView.refreshLayout.autoRefresh() //第一次进入触发自动刷新，演示效果
    }//将不会再次触发加载更多事件//setNoMoreData(false);

    /**
     * app端通过申请人获取临时缴费续费申请分页接口
     */
    private fun getAmibaInstallPageByUserId() {
        val customDialog = CustomDialog(mContext, "正在加载...")
        customDialog.show()

        viewModel.getAmibaInstallPageByUserId(SharedPreUtils.getInteger("", 0), pageNo, pageSize)
            .observe(this, object : ObserverState<MutableList<AmibaInstallPageByUserIdBean>>() {
                override fun onDataChange(data: MutableList<AmibaInstallPageByUserIdBean>) {
                    if (pageNo == 1) {
                        when (getRefreshStatus(data.size)) {
                            Status.SUCCESS -> {
                                mAdapter?.setList(data)
                                if (data.size < pageSize) {
                                    bindingView.refreshLayout.setEnableLoadMore(false)
                                } else {
                                    bindingView.refreshLayout.setEnableLoadMore(true)
                                }
                                bindingView.refreshLayout.resetNoMoreData() //setNoMoreData(false);
                                bindingView.llStateful.showContent()
                            }
                            Status.EMPTY -> {
                                bindingView.llStateful.showEmpty()
                                bindingView.refreshLayout.setEnableLoadMore(false)
                            }
                            Status.ERROR -> showError()
                            Status.NO_NET -> showOffline()
                        }
                        bindingView.refreshLayout.finishRefresh()
                    } else {
                        if (data.size == 0) {
                            ToastUtils.showShort("数据全部加载完毕")
                            bindingView.refreshLayout.finishLoadMoreWithNoMoreData() //将不会再次触发加载更多事件
                        } else {
                            mAdapter?.addData(data)
                            bindingView.refreshLayout.finishLoadMore()
                        }
                    }
                    super.onDataChange(data)
                }
                override fun onError(msg: String?, code: Int) {
                    customDialog.dismiss()
                    ToastUtils.showShort(mContext, msg)
                    super.onError(msg, code)
                }
            })
    }



    private fun showOffline() {
        bindingView.llStateful.showOffline { bindingView.refreshLayout.autoRefresh() }
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private fun showError() {
        bindingView.llStateful.showError { bindingView.refreshLayout.autoRefresh() }
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private enum class Status {
        SUCCESS, EMPTY, ERROR, NO_NET
    }

    private fun getRefreshStatus(size: Int): Status {
        return if (size == 0) {
            Status.EMPTY
        } else Status.SUCCESS
    }
}